home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / x86 / include / asm / mach-default / apm.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.7 KB  |  74 lines

  1. /*
  2.  *  Machine specific APM BIOS functions for generic.
  3.  *  Split out from apm.c by Osamu Tomita <tomita@cinet.co.jp>
  4.  */
  5.  
  6. #ifndef _ASM_X86_MACH_DEFAULT_APM_H
  7. #define _ASM_X86_MACH_DEFAULT_APM_H
  8.  
  9. #ifdef APM_ZERO_SEGS
  10. #    define APM_DO_ZERO_SEGS \
  11.         "pushl %%ds\n\t" \
  12.         "pushl %%es\n\t" \
  13.         "xorl %%edx, %%edx\n\t" \
  14.         "mov %%dx, %%ds\n\t" \
  15.         "mov %%dx, %%es\n\t" \
  16.         "mov %%dx, %%fs\n\t" \
  17.         "mov %%dx, %%gs\n\t"
  18. #    define APM_DO_POP_SEGS \
  19.         "popl %%es\n\t" \
  20.         "popl %%ds\n\t"
  21. #else
  22. #    define APM_DO_ZERO_SEGS
  23. #    define APM_DO_POP_SEGS
  24. #endif
  25.  
  26. static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in,
  27.                     u32 *eax, u32 *ebx, u32 *ecx,
  28.                     u32 *edx, u32 *esi)
  29. {
  30.     /*
  31.      * N.B. We do NOT need a cld after the BIOS call
  32.      * because we always save and restore the flags.
  33.      */
  34.     __asm__ __volatile__(APM_DO_ZERO_SEGS
  35.         "pushl %%edi\n\t"
  36.         "pushl %%ebp\n\t"
  37.         "lcall *%%cs:apm_bios_entry\n\t"
  38.         "setc %%al\n\t"
  39.         "popl %%ebp\n\t"
  40.         "popl %%edi\n\t"
  41.         APM_DO_POP_SEGS
  42.         : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx),
  43.           "=S" (*esi)
  44.         : "a" (func), "b" (ebx_in), "c" (ecx_in)
  45.         : "memory", "cc");
  46. }
  47.  
  48. static inline u8 apm_bios_call_simple_asm(u32 func, u32 ebx_in,
  49.                         u32 ecx_in, u32 *eax)
  50. {
  51.     int    cx, dx, si;
  52.     u8    error;
  53.  
  54.     /*
  55.      * N.B. We do NOT need a cld after the BIOS call
  56.      * because we always save and restore the flags.
  57.      */
  58.     __asm__ __volatile__(APM_DO_ZERO_SEGS
  59.         "pushl %%edi\n\t"
  60.         "pushl %%ebp\n\t"
  61.         "lcall *%%cs:apm_bios_entry\n\t"
  62.         "setc %%bl\n\t"
  63.         "popl %%ebp\n\t"
  64.         "popl %%edi\n\t"
  65.         APM_DO_POP_SEGS
  66.         : "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx),
  67.           "=S" (si)
  68.         : "a" (func), "b" (ebx_in), "c" (ecx_in)
  69.         : "memory", "cc");
  70.     return error;
  71. }
  72.  
  73. #endif /* _ASM_X86_MACH_DEFAULT_APM_H */
  74.